package edu.lingnan.rili.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * Created with IntelliJ IDEA.
 * 描述: 文件上传的工具类！
 * 内容: 这里封装了文件上传的核心方法
 */
public class UploadUtils {

    @Autowired
    private static ConfigurationData configurationData;

    //定义一个上传文件的路径
    private static final String BASE_PATH = configurationData.getUploadPath();
    //定义文件服务器的访问地址
    private static final String SERVER_PATH = configurationData.getVisitPath();

    /**
     * 上传图片文件方法
     *
     * @param file    图片文件
     * @param usersId 用户id（即学号）
     * @return 返回图片在服务器中的访问地址
     */
    public static String upload(MultipartFile file, String usersId) {

        //获得上传文件的名称
        String filename = file.getOriginalFilename();
        //获取源文件的后缀名
        int index = filename.lastIndexOf(".");
        // 对没有后缀名的文件进行判断
        if (index < 0) {
            return "notPhoto";
        }
        String suffix = filename.substring(index); //截取.点后面的内容
        System.out.println("截取.点后面的内容:" + suffix);
        //判断是否为图片格式
        if (!suffix.equals(".jpg") && !suffix.equals(".png") && !suffix.equals(".jpeg")) {
            return "notPhoto";
        }

        //创建UUID，用来保持文件名字的唯一性
        String uuid = UUID.randomUUID().toString().replace("-", "");

        //进行文件名称的拼接
        String newFileName = usersId + "_" + uuid + suffix;
        //创建文件实例对象
        File uploadFile = new File(BASE_PATH, newFileName);
        System.out.println("文件地址39：" + uploadFile.getPath());
        //判断当前文件是否存在
        if (!uploadFile.exists()) {
            //如果不存在就创建一个文件夹
            uploadFile.mkdirs();
        }
        //执行文件上传的命令
        try {
            file.transferTo(uploadFile);
        } catch (IOException e) {
            return null;
        }
        //将上传的文件名称返回，注意，这里我们返回一个 服务器地址
        return SERVER_PATH + newFileName;
    }

}
